package com.itheima.controller;

import com.alibaba.dubbo.config.annotation.Reference;
import com.itheima.constant.MessageConstant;
import com.itheima.constant.RedisConstant;
import com.itheima.entity.PageResult;
import com.itheima.entity.QueryPageBean;
import com.itheima.entity.Result;
import com.itheima.pojo.CheckGroup;
import com.itheima.pojo.Setmeal;
import com.itheima.service.SetmealService;
import com.itheima.utils.QiniuUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import redis.clients.jedis.JedisPool;

import java.io.IOException;
import java.util.List;
import java.util.UUID;

/**
 * @Author : sunjun
 * @email : sunjun0207@163.com
 * @create 2019/11/8 23:25
 */
//套餐管理setmeal
@RestController
@RequestMapping("/setmeal")
public class SetmealController {
    //使用JedisPool操作Redis服务
    @Autowired
    private JedisPool jedisPool;
    //注入SetmealService对象
    @Reference
    private SetmealService setmealService;


    /*
    后台管理-->预约列表(查询所有套餐)
     */
    @RequestMapping("/findAll")
    public Result findAll(){
        //程序健壮性和安全性处理
        try {
            //调用setmealService完成查询
            List<Setmeal> list = setmealService.findAll();
            return new Result(true,MessageConstant.QUERY_SETMEAL_SUCCESS,list);
        } catch (Exception e) {
            e.printStackTrace();
            return new Result(false,MessageConstant.QUERY_SETMEAL_FAIL);
        }

    }


// -----------------------------------------
// -----------------------------------------


    /*
    套餐管理-->删除套餐方法
     1.删除关联表
    2.删除检查组表
     */
    @RequestMapping("/delete")
    public Result delete(Integer id){
        //程序健壮性和安全性处理
        try {
            //调用checkGroupService完成删除
            setmealService.delete(id);
            return new Result(true,MessageConstant.DELETE_SETMEAL_SUCCESS);
        } catch (Exception e) {
            e.printStackTrace();
            return new Result(false,MessageConstant.DELETE_SETMEAL_FAIL);
        }
    }



    /*
    套餐管理-->编辑套餐方法
      1.根据套餐id查询套餐信息,套餐表
      根据套餐id查询所有检查组id,:已在checkgroup中定义
     2.根据套餐id查询检查组复选框,中间表
     3.提交修改表单
    Result:封装返回结果
     */
    @RequestMapping("/findById")
    public Result findById(Integer id){
        //程序健壮性和安全性处理
        try {
            //调用setmealService完成查询
            Setmeal setmeal = setmealService.findById(id);
            return new Result(true,MessageConstant.QUERY_SETMEAL_SUCCESS,setmeal);
        } catch (Exception e) {
            e.printStackTrace();
            return new Result(false,MessageConstant.QUERY_SETMEAL_FAIL);
        }
    }

    @RequestMapping("/findCheckGroupIdsBySetmealId")
    public Result findCheckGroupIdsBySetmealId(Integer id){
        //程序健壮性和安全性处理
        try {
            //调用setmealService完成查询
            List<Integer> CheckGroupIds = setmealService.findCheckGroupIdsBySetmealId(id);
            return new Result(true,MessageConstant.QUERY_CHECKGROUP_SUCCESS,CheckGroupIds);
        } catch (Exception e) {
            e.printStackTrace();
            return new Result(false,MessageConstant.QUERY_CHECKGROUP_FAIL);
        }
    }

    @RequestMapping("/edit")
    public Result edit(@RequestBody Setmeal setmeal, Integer[] checkgroupIds){
        //程序健壮性和安全性处理
        try {
            //调用setmealService完成查询
            setmealService.edit(setmeal,checkgroupIds);
            return new Result(true,MessageConstant.EDIT_SETMEAL_SUCCESS);
        } catch (Exception e) {
            e.printStackTrace();
            return new Result(false,MessageConstant.EDIT_SETMEAL_FAIL);
        }
    }




    /*
    套餐管理-->新建添加套餐
     */
    @RequestMapping("/add")
    public Result add(@RequestBody Setmeal setmeal, Integer[] checkgroupIds){
        //程序健壮性和安全性处理
        try {
            //调用setmealService完成添加
            setmealService.add(setmeal,checkgroupIds);
            return new Result(true,MessageConstant.ADD_SETMEAL_SUCCESS);
        } catch (Exception e) {
            e.printStackTrace();
            return new Result(false,MessageConstant.ADD_SETMEAL_FAIL);
        }
    }

    /*
    套餐管理-->分页查询findPage
     */
    @RequestMapping("/findPage")
    public PageResult findPage(@RequestBody QueryPageBean queryPageBean){
        //调用setmealService完成查询 PageResult pageResult = setmealService.pageQuery(queryPageBean);
       PageResult pageResult = setmealService.pageQuery(queryPageBean);
        //返回结果
        return pageResult;
    }


    /*
    套餐管理-->新建-->图片上传upload
    @RequestParam:前端页面返回图片名封装到
    "多媒体文件"对象中
     */
    @RequestMapping("/upload")
    public Result upload(@RequestParam("imgFile") MultipartFile imgFile){
        //程序健壮性和安全性处理
        try {
            //调用imgFile中方法获取图片文件名
            String originalFilename = imgFile.getOriginalFilename();//20191006134219.jpg
            //调用String中方法获取字符串里"."所在的索引位置
            int lastIndexOf = originalFilename.lastIndexOf(".");
            //调用String中方法截取字符串里.jpg文件后缀名
            String suffix = originalFilename.substring(lastIndexOf - 1);
            //调用UUID中的方法随机产生文件名称,
            //防止同名文件覆盖
            String fileName = UUID.randomUUID().toString() + suffix;
            //调用七牛云工具类上传文件
            QiniuUtils.upload2Qiniu(imgFile.getBytes(),fileName);
           //加入Redis缓存服务,上传到七牛云的图片存到Redis的set集合
            jedisPool.getResource().sadd(RedisConstant.SETMEAL_PIC_RESOURCES,fileName);


            //图片上传成功
            return new Result(true, MessageConstant.PIC_UPLOAD_SUCCESS,fileName);
        } catch (IOException e) {
            e.printStackTrace();
        }
        //图片上传失败
        return new Result(false,MessageConstant.PIC_UPLOAD_FAIL);
    }


}
